tests: Add testblur
authorTimm Bäder <mail@baedert.org>
Tue, 27 Feb 2018 11:51:07 +0000 (12:51 +0100)
committerTimm Bäder <mail@baedert.org>
Tue, 27 Feb 2018 11:51:07 +0000 (12:51 +0100)
tests/meson.build
tests/testblur.c [new file with mode: 0644]

index 75e2d30b1c412d23c617c200a8b30112d66e0217..3bdf1f6e62d2c2058738ecfff1eb70b35e4ef970 100644 (file)
@@ -127,6 +127,7 @@ gtk_tests = [
   ['showrendernode'],
   ['testborderdrawing'],
   ['testoutsetshadowdrawing'],
+  ['testblur']
 ]
 
 if os_linux
diff --git a/tests/testblur.c b/tests/testblur.c
new file mode 100644 (file)
index 0000000..5540d6d
--- /dev/null
@@ -0,0 +1,118 @@
+
+#include <gtk/gtk.h>
+
+
+
+struct _GtkBlurBox
+{
+  GtkBox parent_instance;
+
+  double radius;
+};
+typedef struct _GtkBlurBox GtkBlurBox;
+
+struct _GtkBlurBoxClass
+{
+  GtkBoxClass parent_class;
+};
+typedef struct _GtkBlurBoxClass GtkBlurBoxClass;
+
+
+G_DEFINE_TYPE (GtkBlurBox, gtk_blur_box, GTK_TYPE_BOX)
+
+
+static void
+snapshot_blur (GtkWidget   *widget,
+               GtkSnapshot *snapshot)
+{
+  GtkBlurBox *box = (GtkBlurBox *) widget;
+
+  gtk_snapshot_push_blur (snapshot, box->radius, "blur");
+
+  GTK_WIDGET_CLASS (gtk_blur_box_parent_class)->snapshot (widget, snapshot);
+
+  gtk_snapshot_pop (snapshot);
+}
+
+
+static void
+gtk_blur_box_init (GtkBlurBox *box) {}
+
+static void
+gtk_blur_box_class_init (GtkBlurBoxClass *klass)
+{
+  GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
+
+  widget_class->snapshot = snapshot_blur;
+}
+
+static void
+value_changed_cb (GtkRange *range,
+                  gpointer  user_data)
+{
+  GtkBlurBox *box = user_data;
+  double value = gtk_range_get_value (range);
+
+  box->radius = value;
+  gtk_widget_queue_draw (GTK_WIDGET (box));
+}
+
+static void
+value_changed_cb2 (GtkRange *range,
+                   gpointer  user_data)
+{
+  GtkLabel *label = user_data;
+  double value = gtk_range_get_value (range);
+  char *text;
+
+  text = g_strdup_printf ("%.2f", value);
+  gtk_label_set_label (label, text);
+  g_free (text);
+}
+
+int
+main (int argc, char **argv)
+{
+  GtkWidget *window;
+  GtkWidget *blur_box;
+  GtkWidget *scale;
+  GtkWidget *value_label;
+
+  gtk_init ();
+
+  window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+  blur_box = g_object_new (gtk_blur_box_get_type (),
+                           "orientation", GTK_ORIENTATION_VERTICAL,
+                           "spacing", 32,
+                           NULL);
+
+  value_label = gtk_label_new ("FF");
+  gtk_widget_set_margin_top (value_label, 32);
+  {
+    PangoAttrList *attrs;
+
+    attrs = pango_attr_list_new ();
+    pango_attr_list_insert (attrs, pango_attr_scale_new (6.0));
+    gtk_label_set_attributes (GTK_LABEL (value_label), attrs);
+    pango_attr_list_unref (attrs);
+  }
+  gtk_container_add (GTK_CONTAINER (blur_box), value_label);
+
+
+  scale = gtk_scale_new_with_range (GTK_ORIENTATION_HORIZONTAL, 0, 10, 0.5);
+  gtk_widget_set_size_request (scale, 200, -1);
+  gtk_widget_set_halign (scale, GTK_ALIGN_CENTER);
+  gtk_widget_set_valign (scale, GTK_ALIGN_CENTER);
+  gtk_widget_set_hexpand (scale, TRUE);
+  g_signal_connect (scale, "value-changed", G_CALLBACK (value_changed_cb), blur_box);
+  g_signal_connect (scale, "value-changed", G_CALLBACK (value_changed_cb2), value_label);
+
+
+  gtk_container_add (GTK_CONTAINER (blur_box), scale);
+  gtk_container_add (GTK_CONTAINER (window), blur_box);
+
+  gtk_widget_show (window);
+  gtk_main ();
+
+  return 0;
+}